//package com.liuyu.common.framework.decision.company.service.impl;
//
//import com.google.common.collect.Lists;
//import com.liuyu.common.framework.common.constant.SelfConstants;
//import com.liuyu.common.framework.decision.company.service.facade.CompanyService;
//import com.liuyu.common.framework.lang.exception.BusinessException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//import java.util.Set;
//import java.util.concurrent.TimeUnit;
//
///**
// * 机构层级接口实现类
// *
// * @author: liuyu
// * @date: 2024/10/14 17:28
// * @version: 1
// */
//@Service
//public class CompanyServiceImpl implements CompanyService {
//
//    @Autowired
//    private CpsCompanyMapper cpsCompanyDao;
//
//    @Autowired
//    private RedisTemplate redisTemplate;
//
//    private static final Object OBJECT = new Object();
//
//    /**
//     * 获取机构的所有上级机构
//     *
//     * @param comCode
//     * @return java.util.List<java.lang.String>
//     * @throws
//     * @author liuyu
//     * @date 2024/10/15 9:11
//     */
//    @Override
//    public List<String> getUpperComCodeString(String comCode) {
//        String comCodeStr = cpsCompanyDao.getUpperComCodeString(comCode);
//        String[] comCodeArray = comCodeStr.split(",");
//        //去掉自己本身
//        List<String> comCodeList = Lists.newArrayListWithCapacity(comCodeArray.length - 1);
//        //从近到远排序
//        for (int i = comCodeArray.length - 2; i >= 0; i--) {
//            comCodeList.add(comCodeArray[i]);
//        }
//        return comCodeList;
//    }
//
//
//    /**
//     * 获取机构的所有下级机构
//     *
//     * @param comCode
//     * @param comType
//     * @return java.util.Set<java.lang.String>
//     * @throws
//     * @author liuyu
//     * @date 2024/10/15 9:11
//     */
//    @Override
//    public Set<String> getLowerComCode(String comCode, String comType) {
//        Set<String> comCodeSet = cpsCompanyDao.getLowerComCode(comCode, comType);
//        return comCodeSet;
//    }
//
//
//    /**
//     * 获取地市机构代码
//     *
//     * @param comCode
//     * @return java.lang.String
//     * @throws
//     * @author liuyu
//     * @date 2024/10/15 9:12
//     */
//    @Override
//    public String getCityComCode(String comCode) {
//        String key = SelfConstants.CacheManagerName.COMCODE_CITY_RELATION + comCode;
//        String result = (String) redisTemplate.opsForValue().get(key);
//
//        if (result != null) {
//            return result;
//        }
//        synchronized (OBJECT) {
//            result = (String) redisTemplate.opsForValue().get(key);
//            if (result == null) {
//                String comCodeStr = cpsCompanyDao.getCityComCode(comCode);
//                String[] comCodeArray = comCodeStr.split(",");
//                if (comCodeArray.length > 0) {
//                    if (comCodeArray.length > 2) {
//                        result = comCodeArray[2];
//                    } else {
//                        result = comCodeArray[comCodeArray.length - 1];
//                    }
//                } else {
//                    throw new BusinessException("com_path错误:" + comCodeStr);
//                }
//                redisTemplate.opsForValue().set(SelfConstants.CacheManagerName.COMCODE_CITY_RELATION + comCode, result, 24, TimeUnit.HOURS);
//            }
//        }
//
//        return result;
//    }
//
//
//    /**
//     * 根据comCode返回对应机构名称
//     *
//     * @param comCode
//     * @return java.lang.String
//     * @throws
//     * @author liuyu
//     * @date 2024/10/15 9:12
//     */
//    @Override
//    public String getComName(String comCode) {
//        return cpsCompanyDao.getComName(comCode);
//    }
//
//
//    /**
//     * 判断sourceComCode机构是否在targetComCode机构的下级范围
//     *
//     * @param sourceComCode
//     * @param targetComCode
//     * @return java.lang.Boolean
//     * @throws
//     * @author liuyu
//     * @date 2024/10/15 9:12
//     */
//    @Override
//    public Boolean isUpperCom(String sourceComCode, String targetComCode) {
//        List<String> upperComCodes = getUpperComCodeString(sourceComCode);
//        Boolean flag = false;
//        for (String upperComCode : upperComCodes) {
//            if (upperComCode.equals(targetComCode)) {
//                flag = true;
//            }
//        }
//        return flag;
//    }
//}
